package com.qj.threadpool.utils;

import org.slf4j.Logger;

import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

/**
 * @description: 功能仅仅用于超时的时候返回默认值即可！
 * 此处需要传入Logger是因为如果用CompletableFutureUtils的log来打印，
 * * 那么其log信息全是这个工具类的了，
 * * 我们就无法分清日志是具体哪个业务执行产生的；
 * * 所以选择自行传入Logger，当要打印日志时候就进行使用，日志中变化携带调用类的信息，我们便一目了然！
 * @author: dlw
 * @date: 2025/5/28 11:33
 */
public class CompletableFutureUtils {

    public static <T> T getResult(Future<T> future, // 具体执行方法函数
                                  long timeOut, // 超时时间
                                  TimeUnit timeUnit, // 超时时间单位
                                  T defaltValue, // 错误情况返回的默认值
                                  Logger logger // 日志
    ) {
        try {
            return future.get(timeOut, timeUnit);
        } catch (Exception e) {
            logger.error("CompletableFutureUtils.getResult.error:{}", e.getMessage(), e);
            return defaltValue;
        }
    }
}